home *** CD-ROM | disk | FTP | other *** search
/ PC Media 23 / PC MEDIA CD23.iso / share / prog / anubis / bios.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-08-04  |  1.6 KB  |  117 lines

  1. #include <dos.h>
  2. #include <math.h>
  3.  
  4. #define VIDEO 0x10
  5. #define MAX_Y 479
  6.  
  7. void SetModo(int modo)
  8. {
  9.     union REGS regs;
  10.  
  11.     if (modo >= 0 && modo < 0x14)
  12.         {
  13.         regs.h.ah = 0x00;    /* Definir el modo de video */
  14.         regs.h.al = modo;    /* 640x480, 16 colores */
  15.         int86(VIDEO, ®s, ®s);
  16.         };
  17. }
  18.  
  19. void Punto(unsigned int x, unsigned int y, char color)
  20. {
  21.     union REGS regs;
  22.  
  23.     regs.h.ah = 0x0c;
  24.     regs.h.al = color;
  25.     regs.h.bh = 0;
  26.     regs.x.cx = x;
  27.     regs.x.dx = MAX_Y-y;
  28.  
  29.     int86(VIDEO, ®s, ®s);
  30. }
  31.  
  32. void SwapInt(int *a, int *b)
  33. {
  34.     int aux;
  35.  
  36.     aux=*a;
  37.     *a=*b;
  38.     *b=aux;
  39. }
  40.  
  41. void Linea(int x0, int y0, int x1, int y1, char color)
  42. {
  43.     int dx, dy, IncrS, IncrN, d, x, y, IncrX, IncrY;
  44.     if (abs(y1-y0) < abs(x1-x0))
  45.         {
  46.         if (x0 > x1)
  47.         {
  48.             SwapInt(&x0,&x1);
  49.             SwapInt(&y0,&y1);
  50.         };
  51.  
  52.         IncrY = (y1 > y0) ? 1:-1;
  53.  
  54.         dx=x1-x0;
  55.         dy=abs(y1-y0);
  56.         d=2*dy-dx;
  57.         IncrS=2*dy;
  58.         IncrN=2*(dy-dx);
  59.         x=x0;
  60.         y=y0;
  61.         Punto(x,y,color);
  62.         while (x < x1)
  63.             {
  64.             if (d <= 0)
  65.                 {
  66.                 d+=IncrS;
  67.                 x+=1;
  68.                 }
  69.             else
  70.                 {
  71.                 d+=IncrN;
  72.                 x+=1;
  73.                 y+=IncrY;
  74.                 };
  75.             Punto(x,y,color);
  76.             };
  77.         }    /* if (abs(y1-y0) < abs(x1-x0)) */
  78.     else
  79.         {
  80.         if (y0 > y1)
  81.             {
  82.             SwapInt(&x1,&x0);
  83.             SwapInt(&y1,&y0);
  84.             }
  85.  
  86.         IncrX = (x1 > x0) ? 1:-1;
  87.  
  88.         dy=y1-y0;
  89.         dx=abs(x1-x0);
  90.         d=2*dx-dy;
  91.         IncrS=2*dx;
  92.         IncrN=2*(dx-dy);
  93.         x=x0;
  94.         y=y0;
  95.  
  96.         Punto(x,y,color);
  97.         while (y < y1)
  98.             {
  99.             if (d <= 0)
  100.                 {
  101.                 d+=IncrS;
  102.                 y+=1;
  103.                 }
  104.             else
  105.                 {
  106.                 d+=IncrN;
  107.                 y+=1;
  108.                 x+=IncrX;
  109.                 };
  110.             Punto(x,y,color);
  111.             };
  112.         };
  113. }
  114.  
  115.  
  116.  
  117.